package org.example;

public class MedianSorted {

    public static void main(String[] args) {
        MedianSorted medianSorted = new MedianSorted();
        System.out.println(medianSorted.findMedianSortedArrays(new int[]{1, 2}, new int[]{3, 4}));
    }


    /**
     *   2数组取合并取中位数
     *
     *   思路：
     *    a数组长度为la   b数组长度为lb
     *    假设a b组合 c 则
     *    如 la+lb = lc 为奇数 则取 中间数即可 为  ( lc +1 )/2
     *    如 la+lb = lc 为偶数 则取 中间数相加 /2 即可 为(lc + 1 )/2 -1  和  (lc + 1 )/2
     *    所以记录
     *    pre = lc[(lc+1)/2-1]
     *    suf = lc[(lc+1)/2]
     *    lc为奇数  返回suf
     *    lc为偶数  返回 （pre+suf） / 2
     * @return
     */

    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int la = nums1.length;
        int lb = nums2.length;
        int n = (la + lb) / 2;
        int lpa = 0;
        int lpb = 0;
        double pre = 0;
        double suf = 0;
        for (int i = 0; i <= n; i++) {
            pre = suf;
            if (lpa < la && (lpb >= lb || nums1[lpa] < nums2[lpb])) {
                suf = nums1[lpa++];
            } else {
                suf = nums2[lpb++];
            }
        }
        if (((lb + la) & 1) == 0)
            return (pre + suf) / 2;
        else
            return suf;
    }
}
